﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using ServicioRFIDMovil.Entidad;
using ServicioRFIDMovil.DataAccess;
using ServicioRFIDMovil.Herramientas;
using System.Data;

namespace ServicioRFIDMovil.Datos
{
    public class MovimientoDA
    {
        #region --- Variables y Constantes ---
        private static readonly ILog log = LogManager.GetLogger(typeof(MovimientoDA));

        // Parametros Entrada

        private const string PARAM_IIDMOVIMIENTOTIPO = "P_IIDMOVIMIENTOTIPO";
        private const string PARAM_IIDUSUARIOREGISTRA = "P_IIDUSUARIOREGISTRA";
        private const string PARAM_IIDSOLICITUD = "P_IIDSOLICITUD";

        private const string PARAM_COD_CAB_MOVIMIENTO = "P_IIDMOVIMIENTO";

        private const string PARAM_IIDESTADO = "P_IIDESTADO";
        private const string PARAM_IIDSITUACION = "P_IIDSITUACION";
         

        private const string PARAM_IIDBIEN = "P_IIDBIEN";
        private const string PARAM_IIDESTADOPRESTAMO = "P_IIDESTADOPRESTAMO";
        private const string PARAM_IIDUSUARIOEDITA = "P_IIDUSUARIOEDITA";
    
         
        // Parametros Salida
        private const string PARAM_CODCABMOVIMIENTO = "P_MOVIMIENTO";
        private const string CODCABMOVIMIENTO = "P_IDMOVIMIENTO";

        #endregion

        #region --- Metodos Propios ---
        public int registrarMovimiento(ListaDetalleBienMovimiento listaDetalleBienMovimiento, Movimiento movimiento)
        {
            //bool resultado = false;
            int resultado = 0;

            DataSet dsMovimiento = new DataSet();

            if (log.IsDebugEnabled)
            {
                log.Debug("registrarMovimiento()");
            }

            using (Database db = new Database(ConstantesDAO.NombreInterface.ConexTvperu))
            {
                db.iniciarTransaccion();

                int cabecera_movimiento = 0;

                db.NombreProcedimiento = DataBaseHelper.obtenerNombreProcedimiento(Constantes.PROCEDIMIENTO_RFID_REGISTRARMOVIMIENTO);
                db.agregarParametro(PARAM_IIDMOVIMIENTOTIPO, DbType.Int32, ParameterDirection.Input, movimiento.idMovimientTipo);
                db.agregarParametro(PARAM_IIDUSUARIOREGISTRA, DbType.Int32, ParameterDirection.Input, movimiento.usuarioRegistra.idUsuario);
                db.agregarParametro(PARAM_IIDSOLICITUD, DbType.Int32, ParameterDirection.Input, movimiento.solicitud.codSolicitud);
                db.agregarParametro(PARAM_CODCABMOVIMIENTO, DbType.Int32, ParameterDirection.Output);
                
                db.ejecutar();
       
                 //cabecera_movimiento = Convert.ToInt32(fila[CODCABMOVIMIENTO]);
                 cabecera_movimiento = Convert.ToInt32(db.obtenerParametro(PARAM_CODCABMOVIMIENTO).Value);
                                

                foreach (DetalleBienMovimiento detalleBienMovimiento in listaDetalleBienMovimiento)
                {
                    db.NombreProcedimiento = DataBaseHelper.obtenerNombreProcedimiento(Constantes.PROCEDIMIENTO_RFID_REGISTRARDETALLEMOVIMIENTO);
                    db.agregarParametro(PARAM_COD_CAB_MOVIMIENTO, DbType.Int32, ParameterDirection.Input, cabecera_movimiento);
                    db.agregarParametro(PARAM_IIDBIEN, DbType.Int32, ParameterDirection.Input, detalleBienMovimiento.bien.idBien);
                    db.agregarParametro(PARAM_IIDESTADO, DbType.Int32, ParameterDirection.Input, detalleBienMovimiento.bien.codBienEstado);
                    db.agregarParametro(PARAM_IIDSITUACION, DbType.Int32, ParameterDirection.Input, detalleBienMovimiento.bien.codBienSituacion);
                    db.agregarParametro(PARAM_IIDUSUARIOREGISTRA, DbType.Int32, ParameterDirection.Input, detalleBienMovimiento.usuarioRegistra.idUsuario);
                   

                    db.ejecutar();
                }

                resultado = cabecera_movimiento;

                db.confirmarTransaccion();
            }

            return resultado;
        }
        #endregion
    }
}
